package org.lemon.cla.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.lemon.cla.pojo.ClubMember;
import org.lemon.cla.vo.ClubMemberVo; // 导入 ClubMemberVo
import org.lemon.cla.dto.request.ClubMemberSearchRequest;
import org.lemon.cla.enums.ClubMemberRoleEnum;
import org.lemon.cla.enums.ClubMemberStatusEnum;

public interface IClubMemberService extends IService<ClubMember> {
    // ... 其他 Service 方法 ...

    boolean isMemberExists(Long userId, Long clubId);

    boolean updateMemberRole(Long memberId, ClubMemberRoleEnum newRole);

    boolean updateMemberStatus(Long memberId, ClubMemberStatusEnum newStatus);

    boolean withdrawFromClub(Long userId, Long clubId);

    /**
     * 根据成员ID获取社团成员详情，包含用户信息。
     * @param memberId 成员ID
     * @return 社团成员视图对象
     */
    ClubMemberVo getClubMemberVoById(Long memberId);

    /**
     * 分页获取所有社团成员，包含用户信息。
     * @param page 分页对象 (ClubMemberVo 泛型)
     * @return 分页社团成员视图对象列表
     */
    IPage<ClubMemberVo> getAllClubMembersVo(Page<ClubMemberVo> page);

    /**
     * 根据多个条件模糊查询社团成员，包含用户信息。
     * @param page 分页对象 (ClubMemberVo 泛型)
     * @param request 查询请求DTO
     * @return 分页社团成员视图对象列表
     */
    IPage<ClubMemberVo> searchClubMembersByConditions(Page<ClubMemberVo> page, ClubMemberSearchRequest request);
}